package com.twb.auth.mapper;

import java.util.List;
import java.util.Set;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.twb.auth.dataScope.annotation.DataScope;
import com.twb.auth.entity.twbOrganization.TwbOrganization;
import com.twb.auth.entity.twbOrganization.TwbOrganizationResource;
import com.twb.auth.entity.twbOrganization.dto.GetTwbOrganizationByIdDto;
import com.twb.auth.entity.twbOrganization.dto.SearchTwbOrganizationDto;
import com.twb.auth.entity.twbOrganization.dto.SearchTwbOrganizationTreeDto;
import com.twb.auth.entity.twbOrganization.dto.TwbOrganizationDto;
import com.twb.auth.entity.twbOrganization.vo.SearchTwbOrganizationTreeVo;
import com.twb.auth.entity.twbOrganization.vo.SearchTwbOrganizationVo;
import com.twb.core.base.mapper.TwbBaseMapper;

/**
 * @ClassName TwbOrganizationMapper
 * @Description 机构管理mapper
 * @author DSY
 * @date 2018年11月3日 下午5:26:24
 */
@Mapper
public interface TwbOrganizationMapper extends TwbBaseMapper<TwbOrganization> {

	/**
	 * @Title  listOrganizationByUserId
	 * @Description 根据用户ID加载用户部门信息
	 * @param userId
	 * @return
	 * @author DSY
	 * @date 2018年11月6日 下午4:44:50
	 */
	Set<TwbOrganization> listOrganizationByUserId(String userId);

	/**
	 * @Title  searchTwbOrganization
	 * @Description 组织机构列表查询
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 上午10:16:59
	 */
	List<SearchTwbOrganizationDto> searchTwbOrganization(SearchTwbOrganizationVo vo);

	/**
	 * @Title  searchTwbOrganizationTree
	 * @Description 组织机构树查询
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 上午10:32:01
	 */
	@DataScope(deptColumn="id")
	List<SearchTwbOrganizationTreeDto> searchTwbOrganizationTree(SearchTwbOrganizationTreeVo vo);

	/**
	 * @Title  getMaxSeqByParentOrgId
	 * @Description 获取相同等级组织机构的最大顺序号
	 * @param parentOrgId
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 上午11:02:40
	 */
	Integer getMaxSeqByParentOrgId(String parentOrgId);

	/**
	 * @Title  getTwbOrganizationById
	 * @Description 根据ID获取组织机构详情
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午12:12:20
	 */
	GetTwbOrganizationByIdDto getTwbOrganizationById(String id);

	/**
	 * @Title  getUserCountByOrgId
	 * @Description 获取机构下的用户数量
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午12:28:58
	 */
	int getUserCountByOrgId(String id);

	/**
	 * @Title  getRoleCountByOrgId
	 * @Description 获取机构下的角色数量
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午12:29:19
	 */
	int getRoleCountByOrgId(String id);

	/**
	 * @Title  getChildOrgCountByOrgId
	 * @Description 获取子级机构数量
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午12:31:25
	 */
	int getChildOrgCountByOrgId(String id);

	/**
	 * @Title  deleteResourceByOrgId
	 * @Description 删除部门资源信息
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午12:31:45
	 */
	int deleteResourceByOrgId(String id);

	/**
	 * @Title  saveOrgResource
	 * @Description 保存机构权限
	 * @param orgResource
	 * @return
	 * @author DSY
	 * @date 2018年11月22日 下午5:39:14
	 */
	int saveOrgResource(TwbOrganizationResource orgResource);

	/**
	 * @Title  searchUserOrganizationTree
	 * @Class: TwbOrganizationMapper.java
	 * @Description 查询用户机构树
	 * @param userId
	 * @return
	 * @author DSY
	 * @date 2018年11月25日 下午8:55:30
	 */
	List<TwbOrganizationDto> searchUserOrganizationTree(String userId);

	/**
	 * @Title getMaxSearchKeyByParentOrgId
	 * @Description 根据ParentOrgId查询最大的searchKey
	 * @param parentOrgId
	 * @return
	 * @author DSY
	 * @date 2020年7月7日 下午3:43:34
	 */
	Long getMaxSearchKeyByParentOrgId(String parentOrgId);

	/**
	 * @Title logicDeleteTwbOrganizationById
	 * @Description 逻辑删除组织机构
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2021年3月10日 下午4:51:25
	 */
	int logicDeleteTwbOrganizationById(String id);
	
	/**
	 * @Title updateSearchKeyIsNull
	 * @Description 根据父级ID更新所有子级的SearchKey为空
	 * @param pid
	 * @return
	 * @AuthorOriginally DHL
	 * @date 2021年7月19日 上午11:53:52
	 */
	int updateSearchKeyIsNull(@Param("pid") String pid);
	
	/**
	 * @Title searchOrganizationByPid
	 * @Description 根据父级ID查询子级
	 * @param pid
	 * @return
	 * @AuthorOriginally DHL
	 * @date 2021年7月19日 上午11:53:48
	 */
	List<SearchTwbOrganizationDto> searchOrganizationByPid(@Param("pid") String pid);
	
	/**
	 * @Title searchFirstOrganization
	 * @Description 查询第一层级组织机构
	 * @return
	 * @AuthorOriginally DHL
	 * @date 2021年7月19日 上午11:45:57
	 */
	List<SearchTwbOrganizationDto> searchFirstOrganization();

	/**
	 * @Title listOrganizationBySearchKey
	 * @Description 根据SearchKey查询组织机构（模糊查询）
	 * @param searchKey
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年11月11日 下午6:00:27
	 */
	List<TwbOrganization> listOrganizationBySearchKey(String searchKey);

	/**
	 * 根据租户ID查询顶级机构信息
	 *
	 * @param tenantId 承租者id
	 * @return {@link TwbOrganization }
	 * @author DHL
	 * @date 2023-02-08 11:50:48
	 */
	TwbOrganization searchIdByTenantId(String tenantId);
}
